package com.yuhang.demo.dto.request;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

/**
 * 规则更新请求DTO
 * 用于接收前端传递的规则更新参数
 */
@Data
public class RuleUpdateRequest {

    /**
     * 规则ID（必须存在，用于定位要更新的规则）
     */
    @NotNull(message = "规则ID不能为空")
    private Long id;

    /**
     * 项目名称（药品通用名/医疗服务项目名称）
     */
    @NotBlank(message = "项目名称不能为空")
    private String itemName;

    private Integer serialNumber; // 序号

    /**
     * 规则类型（DRUG_GENDER:药品区分性别使用；MEDICAL_CHILD:医疗服务项目儿童专用）
     */
    @NotBlank(message = "规则类型不能为空")
    private String ruleType;

    // 药品规则专属参数
    @NotNull(message = "是否医保目录内药品不能为空（仅药品规则）",
            groups = DrugRuleGroup.class)
    private Integer is2024Medical;

    @NotBlank(message = "限定性别不能为空（仅药品规则）",
            groups = DrugRuleGroup.class)
    private String limitGender;

    // 医疗服务项目规则专属参数
    @NotBlank(message = "年龄限制不能为空（仅医疗服务项目规则）",
            groups = MedicalRuleGroup.class)
    private String ageLimit;

    @NotBlank(message = "国家项目代码不能为空（仅医疗服务项目规则）",
            groups = MedicalRuleGroup.class)
    private String nationalItemCode;

    private String remark; // 备注（医疗服务项目规则）

    @NotBlank(message = "标题不能为空（仅医疗服务项目规则）",
            groups = MedicalRuleGroup.class)
    private String title;

    // 通用参数
    @NotBlank(message = "检出逻辑不能为空")
    private String detectLogic;

    @NotBlank(message = "逻辑依据不能为空")
    private String logicBasis;

    // 分组校验：区分两类规则的必填项
    public interface DrugRuleGroup {}
    public interface MedicalRuleGroup {}
}
